【问题标题】:htaccess | RewriteRulehtaccess |重写规则
【发布时间】:2013-06-06 11:44:55
【问题描述】:

我正在将一个网站从 Windows Server 迁移到 Apache,我想在我的新服务器中将一些 404 URL 改正为更正/等效的 URL。

我喜欢做的是使用 RexEx 进行以下排序:

Redirect 301 /username/search.asp                /newdir/username/
Redirect 301 /username/contact.asp               /newdir/username/
Redirect 301 /username/legalmarketing.asp        /newdir/username/
Redirect 301 /username/home.asp                  /newdir/username/

我尝试过使用 RewriteRule 类似的东西:

RewriteRule ^/username/(search|contact|legalmarketing|home)\.asp$ /newdir/username/ [R=301,L]

蝙蝠这不起作用。请问有更好的主意吗?我是不是做错了什么?

更新 #1

我也试过了

RewriteRule ^/username/search.asp$   /newdir/useranme/ [R=301,L]
#as well the following
RewriteRule ^username/search.asp$   /newdir/useranme/ [R=301,L]

还是没有机会

更新 #2

我也尝试过这个教程:http://www.askapache.com/htaccess/crazy-advanced-mod_rewrite-tutorial.html,由于我从服务器获取的空值,问题似乎更复杂。

这是教程代码产生的代码:

Missed These Variables:
Array
(
    [INFO_API_VERSION] => (null)
    [INFO_AUTH_TYPE] => (null)
    [INFO_CONTENT_LENGTH] => (null)
    [INFO_CONTENT_TYPE] => (null)
    [INFO_DOCUMENT_ROOT] => (null)
    [INFO_GATEWAY_INTERFACE] => (null)
    [INFO_HTTPS] => (null)
    [INFO_HTTP_ACCEPT] => (null)
    [INFO_HTTP_ACCEPT_CHARSET] => (null)
    [INFO_HTTP_ACCEPT_ENCODING] => (null)
    [INFO_HTTP_ACCEPT_LANGUAGE] => (null)
    [INFO_HTTP_CACHE_CONTROL] => (null)
    [INFO_HTTP_CONNECTION] => (null)
    [INFO_HTTP_COOKIE] => (null)
    [INFO_HTTP_FORWARDED] => (null)
    [INFO_HTTP_HOST] => (null)
    [INFO_HTTP_KEEP_ALIVE] => (null)
    [INFO_HTTP_MOD_SECURITY_MESSAGE] => (null)
    [INFO_HTTP_PROXY_CONNECTION] => (null)
    [INFO_HTTP_REFERER] => (null)
    [INFO_HTTP_USER_AGENT] => (null)
    [INFO_IS_SUBREQ] => (null)
    [INFO_ORIG_PATH_INFO] => (null)
    [INFO_ORIG_PATH_TRANSLATED] => (null)
    [INFO_ORIG_SCRIPT_FILENAME] => (null)
    [INFO_ORIG_SCRIPT_NAME] => (null)
    [INFO_PATH] => (null)
    [INFO_PATH_INFO] => (null)
    [INFO_PHP_SELF] => (null)
    [INFO_QUERY_STRING] => (null)
    [INFO_REDIRECT_QUERY_STRING] => (null)
    [INFO_REDIRECT_REMOTE_USER] => (null)
    [INFO_REDIRECT_STATUS] => (null)
    [INFO_REDIRECT_URL] => (null)
    [INFO_REMOTE_ADDR] => (null)
    [INFO_REMOTE_HOST] => (null)
    [INFO_REMOTE_IDENT] => (null)
    [INFO_REMOTE_PORT] => (null)
    [INFO_REMOTE_USER] => (null)
    [INFO_REQUEST_FILENAME] => (null)
    [INFO_REQUEST_METHOD] => (null)
    [INFO_REQUEST_TIME] => (null)
    [INFO_REQUEST_URI] => (null)
    [INFO_SCRIPT_FILENAME] => (null)
    [INFO_SCRIPT_GROUP] => (null)
    [INFO_SCRIPT_NAME] => (null)
    [INFO_SCRIPT_URI] => (null)
    [INFO_SCRIPT_URL] => (null)
    [INFO_SCRIPT_USER] => (null)
    [INFO_SERVER_ADDR] => (null)
    [INFO_SERVER_ADMIN] => (null)
    [INFO_SERVER_NAME] => (null)
    [INFO_SERVER_PORT] => (null)
    [INFO_SERVER_PROTOCOL] => (null)
    [INFO_SERVER_SIGNATURE] => (null)
    [INFO_SERVER_SOFTWARE] => (null)
    [INFO_THE_REQUEST] => (null)
    [INFO_TIME] => (null)
    [INFO_TIME_DAY] => (null)
    [INFO_TIME_HOUR] => (null)
    [INFO_TIME_MIN] => (null)
    [INFO_TIME_MON] => (null)
    [INFO_TIME_SEC] => (null)
    [INFO_TIME_WDAY] => (null)
    [INFO_TIME_YEAR] => (null)
    [INFO_TZ] => (null)
    [INFO_UNIQUE_ID] => (null)
)

还有什么好办法吗?

【问题讨论】:

  • 根据此代码在服务器上的位置,您可能需要从搜索模式中删除前导斜杠 /,甚至设置 RewriteBase。
  • .htaccess 文件位于我网站的根目录下,并且 RewriteBase 设置为 /
  • 而删除前导斜杠没有任何作用?
  • 是的,仍然什么都不做

标签: regex apache .htaccess mod-rewrite


【解决方案1】:

试试下面的方法

RewriteRule ^username/search.asp$   http://www.yourdomainname.com/newdir/useranme/ [R=301,L]

【讨论】:

  • 这不是我想要的,也不是解决我的问题。我喜欢做的是在正则表达式中使用 or 运算符来获取我在示例中描述的任何匹配的文件名
  • 我只想告诉你的是把你的域名添加到新的 URL lilke RewriteRule ^username/(search|contact|legalmarketing|home)\.asp$ http://www.yourdomainname.com/newdir/username/ [R=301,L]
猜你喜欢
  • 2011-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多