无法让 mod_rewrite 与 ubuntu 一起工作,已经尝试了所有常见的方法(在配置中打开它等)

无法让 mod_rewrite 与 ubuntu 一起工作,已经尝试了所有常见的方法(在配置中打开它等)

堆,

我正在尝试在我的笔记本电脑上安装我的网站的本地版本,这样我就可以进行开发工作,而不会吓到我的用户并使实时网站崩溃。

我继续在我的笔记本电脑上安装了 ubuntu 以及 apache/mysql/php,并将我的 php 文件和数据库从我的 Web 服务器下载到我的笔记本电脑上。

我继续更改我的 etc/hosts 文件,以便我的网站域名现在指向我的本地主机,这似乎运行良好。

但是,我无论如何都无法让 htaccess mod_rewrite 指令工作。这非常令人沮丧,因为我知道 mod_rewrite 是可以工作的,因为我看过一个在 ubuntu 中打开它的教程(该教程包括一个简单的测试用例,以确保它正常运行)。htaccess 代码在我的实际 Web 服务器上运行良好,但它无法在我本地的 ubuntu 安装上运行。

但是说得够多了,我将让你看看 htaccess 文件中的内容,以吊你的胃口:

# To set your custom php.ini, add the following line to this file:
# suphp_configpath /home/yourusername/path/to/php.ini

AuthUserFile /var/www/.htpasswd
AuthType Basic
AuthName "not allowed"

<Files ".htaccess">
  Require valid-user
</Files>

<Files "uploadpage.php">
  Require valid-user
</Files>

<Files "upload.php">
  Require valid-user
</Files>

ErrorDocument 404 /404.php

Options +FollowSymlinks 
RewriteEngine On
RewriteBase /
RewriteRule ^random/([0-9]+)/(.*)$ random.php?id=$1
RewriteRule ^new/([0-9]+)/(.*)$ new.php?id=$1
RewriteRule ^quickviewrandom/([0-9]+)/(.*)$ quickviewrandom.php?id=$1
RewriteRule ^quickviewnew/([0-9]+)/(.*)$ quickviewnew.php?id=$1
RewriteRule ^archive/previous-30-days/$ archive/previous-30-days.php
RewriteRule ^archive/previous-12-months/$ archive/previous-12-months.php
RewriteRule ^user/profile/(.*)/$ user/profile.php?username=$1
RewriteRule ^post/([0-9]+)/(.*)$ post.php?id=$1&%{QUERY_STRING}
RewriteRule ^direct/([0-9]+)/(.*)$ direct.php?id=$1
RewriteRule ^comments/([0-9]+)/(.*)$ comments.php?id=$1&%{QUERY_STRING}
RewriteRule ^top/([0-9]+)/$ top.php?page=$1
RewriteRule ^topweek/([0-9]+)/$ topweek.php?page=$1
RewriteRule ^fresh/([0-9]+)/$ fresh.php?page=$1
RewriteRule ^user/submitform/$ user/submitform.php
RewriteRule ^user/submit/(.*)/([0-9]+)/$ user/submit.php?username=$1&postlimit=$2
RewriteRule ^user/usercomments/(.*)/([0-9]+)/$ user/usercomments.php?username=$1&commentlimit=$2
RewriteRule ^user/favorites/(.*)/([0-9]+)/$ user/favorites.php?username=$1&favlimit=$2
RewriteRule ^user/friends/(.*)/([0-9]+)/$ user/friends.php?username=$1&friendlimit=$2
RewriteRule ^user/inbox/([0-9]+)/$ user/inbox.php?maillimit=$1&%{QUERY_STRING}
RewriteRule ^user/message/([0-9]+)/$ user/message.php?stackid=$1
RewriteRule ^link([^/]*).html$ rewrite.php?link=$1 [L]

RewriteCond %{QUERY_STRING} img_name=(.*) 
RewriteRule ^new\.php$ http://www.mydomain.com/404.php [R=301]
RewriteRule ^page\.php$ http://www.mydomain.com/404.php [R=301,L]

RewriteEngine on
RewriteCond %{HTTP_HOST} ^mydomain\.com$ [NC]
RewriteRule ^(.*)$ http://www.mydomain.com/$1 [R=301,L]

有什么想法我应该尝试一下吗?说真的,现在我愿意尝试任何事情。

奇怪的是,这个重写规则有效:

RewriteRule ^link([^/]*).html$ rewrite.php?link=$1 [L]

这是我在 ubuntu 中设置 mod_rewrite 的教程的一部分。其余规则都是我自己的,不起作用 :-(

答案1

运行单独的开发服务器空间以及正确使用版本控制等其他事项都是严肃程序员的标志,因此您应该受到赞扬并提醒您,您为正确完成这项工作所付出的痛苦要比在实时网站上进行开发时犯下错误的痛苦更好。

在这种情况下,显然有些假设与现实不符,实际环境和开发环境之间存在一些差异。考虑到这一点,我会从可行的示例开始,慢慢添加条件,不断调整,直到下一个最复杂的事情奏效,寻找可能存在问题的线索。

尝试使用 RewriteCond 的一些简单规则。尝试不使用 RewriteBase 指令。尝试使用和不使用前导锚点“^”。

相关内容