Mod rewrite 修改重写问题
我在修改mod时遇到了一些问题。服务器是Ubuntu 12.04、Apache2、PHP5.4 我想要一个像这样的url: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
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
- 您正在尝试获取/不获取索引吗?如果是这样,你的两条规则都不匹配,这就是你得到404的原因
- 如果没有,您要获取的确切URL是什么?您有权访问服务器日志吗?如果是这样,你能打开重写日志吗
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]