0

我在使用 mod 重写时遇到了一些问题。服务器是 Ubuntu 12.04、Apache2、Php 5.4。

我想要这样的网址:

www.website.com/<modelName>/<imageNumber>

www.website.com/<modelName>

实际显示:

www.website.com/showimage.php?model=<modelName>&image=<imageNumber>

www.website.com/model.php?model=<modelName>

我把它放在 .htaccess 中:

RewriteEngine On
RewriteRule ^([^/]+)/([0-9]+)/?$   showimage.php?model=$1&image=$2  [R,L,NC,QSA]
RewriteRule ^([^/]+)/?$            model.php?model=$1               [R,L,NC,QSA]

我已经检查了 mod_rewrite 是否加载到 apache 中。但是页面只是不重定向。

编辑:澄清一下,结果是 404 '资源/此服务器上不存在'和'资源//此服务器上不存在'。

奇怪的是,我昨天正在玩它,并试图制定一个包含website.com/model/modelName的规则,而且现在似乎已经生效并且无法摆脱。我已经尝试重新启动 Apache 十次,清除浏览器缓存,甚至安装另一个我以前没有的浏览器,但昨天的顽固重定向即使在新浏览器 (FireFox) 中也继续进行。

我写的新重定向规则是否正确?

我如何将它们付诸行动?

我应该在 .htaccess 上设置 chmod 777 吗?

非常感谢...

编辑:这里有更多信息。

我只有一个(默认)站点,文件(包括 .htaccess)只是位于 /var/www

文件 /etc/apache2/sites-available/default 如下所示:

 <VirtualHost *:80>
    ServerAdmin webmaster@localhost

    DocumentRoot /var/www
    <Directory />
            Options FollowSymLinks
            AllowOverride All
    </Directory>
    <Directory /var/www/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride None
            Order allow,deny
            allow from all
    </Directory>

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
            AllowOverride None
            Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
            Order allow,deny
            Allow from all
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog ${APACHE_LOG_DIR}/access.log combined

Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
    Options Indexes MultiViews FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
    Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>

除了 Directory / AllowOverride All 我没有改变任何东西

.htaccess 看起来像这样:

RewriteEngine On
RewriteLog "/etc/apache2/logs/rewrite.log"
RewriteLogLevel 9
RewriteBase /
RewriteRule ^([^/]+)/([0-9]+)/?$   showimage.php?model=$1&image=$2  [R,L,NC,QSA]
RewriteRule ^([^/]+)/?$            model.php?model=$1               [R,L,NC,QSA]

而且我已经无数次地运行 service apache2 restart 。

这个网址工作正常:

/showimage.php?model=Ai&image=12

这个没有:

/Ai/12

帮助!

4

1 回答 1

1
RewriteEngine On
RewriteRule ^([^/]+)/([0-9]+)/?$   showimage.php?model=$1&image=$2  [R,L,NC,QSA]
RewriteRule ^([^/]+)/?$            model.php?model=$1               [R,L,NC,QSA]

而不是“这应该工作”,我将通过翻译规则把它留给你:

  • 第一条规则将匹配带有或不带有斜杠的[anything]/[digits]并使用重定向重新映射到 showimage.php?model=$1&image=$2,将破坏链(即第二条规则不会执行),不区分大小写(不需要),并保留查询字符串参数。第二个做同样的事情,但是model.php。

需要注意的是,第二条规则不匹配空字符串(即获取 /)。这可能是您问题的一部分。

规则本身是正确的。您可以在重写工具上测试这些:http ://martinmelin.se/rewrite-rule-tester/ 。

我相信你的问题很简单。请在评论中回答以下问题,我会从那里提出建议:

  • 您是否尝试获取 / 没有索引?如果是这样,您的规则都不匹配它,这就是您得到 404 的原因。
  • 如果没有,您要获取的确切 URL 是什么?您有权访问服务器日志吗?如果是这样,你能打开重写日志吗?
于 2013-05-02T22:20:51.747 回答