Mod rewrite 修改重写问题

Mod rewrite 修改重写问题,mod-rewrite,apache2,Mod Rewrite,Apache2,我在修改mod时遇到了一些问题。服务器是Ubuntu 12.04、Apache2、PHP5.4 我想要一个像这样的url: www.website.com/<modelName>/<imageNumber> <VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www <Directory /> Options

我在修改mod时遇到了一些问题。服务器是Ubuntu 12.04、Apache2、PHP5.4

我想要一个像这样的url:

www.website.com/<modelName>/<imageNumber>
 <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>
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]
我已经检查了mod_rewrite是否在apache中加载。 但是页面没有重定向

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

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

我编写的新重定向规则正确吗

我如何将它们付诸行动

我应该将chmod 777设置为.htaccess吗

非常感谢

编辑:这里有更多的信息

我只有一个(默认)站点,文件(包括.htaccess)就在/var/www中

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

www.website.com/<modelName>/<imageNumber>
 <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>
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]
我已经无数次地运行服务apache2重启

此url工作正常:

/showimage.php?model=Ai&image=12
这个没有:

/Ai/12
救命啊

与其说“这应该行得通”,我将把它留给你,只翻译规则:

  • 第一条规则将匹配[任何东西]/[数字](带或不带尾随斜杠),并使用重定向重新映射到showimage.php?model=$1&image=$2,将断开链(即第二条规则将不执行),不区分大小写(不需要),并保留查询字符串参数。 第二个也一样,但是model.php
需要注意的是,第二条规则与空字符串(即fetching/)不匹配。这可能是你问题的一部分

规则本身是正确的。您可以在以下位置的重写工具上测试这些

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

  • 您正在尝试获取/不获取索引吗?如果是这样,你的两条规则都不匹配,这就是你得到404的原因
  • 如果没有,您要获取的确切URL是什么?您有权访问服务器日志吗?如果是这样,你能打开重写日志吗

嗨,谢谢你的帮助。我没有得到一个404与一个“空”网址,即www.website.com。我正在上头版,这很好。但是请求例如www.website.com/name/123会得到404,而www.website.com/showmimage.php?model=name&image=123工作正常。能否在重写规则之前添加以下行:
RewriteBase/
。如果有什么作用,请告诉我。我尝试通过将其添加到.htaccess:RewriteLog上的RewriteEngine“/etc/apache2/logs/rewrite.log”RewriteLogLevel 9 RewriteRule^([^/]+)/([0-9]+)/?$showimage.php?model=$1&image=$2[R,L,NC,QSA]RewriteRule^([^/]+)/?$model.php?model=$1[R,L,NC,QSA]…但是/etc/apache2/logs文件夹仍然是空的该文件夹仍然是空的吗?可以要么您正在运行suhosin,要么您的htaccess覆盖已完全关闭。转到virtualhost配置并将以下索引添加到目录上的选项:AllowOverride all。如果是这个问题,这将重新打开htaccess。如果不是,它就什么也做不了。更多信息,我在文件中添加了RewriteBase/,但没有更改。请注意,/model/仍然有效,即使在Chrome中的“匿名模式”下,或者在以前从未加载过网站的机器/浏览器上也是如此
/Ai/12
RewriteEngine On
RewriteRule ^([^/]+)/([0-9]+)/?$   showimage.php?model=$1&image=$2  [R,L,NC,QSA]
RewriteRule ^([^/]+)/?$            model.php?model=$1               [R,L,NC,QSA]