【问题标题】:How to rewrite URL without .htaccess?如何在没有 .htaccess 的情况下重写 URL?
【发布时间】:2014-07-20 06:13:10
【问题描述】:

我一直在网上阅读此内容,但仍然无法弄清楚如何正确实施它。如果您能帮助我了解如何在没有 .htaccess 的情况下使 url 重写工作,我将不胜感激。

为了检查mod_rewrite 是否启用,我运行了命令~# sudo apachectl -t -D DUMP_MODULES。它产生了以下模块:rewrite_module (shared)。不知道是不是和mod_rewrite一样?

文件夹/etc/apache2/mods-enabled/ 有文件rewrite.load

我不清楚应该向哪个文件添加重写规则?

位于/etc/apache2/ 的文件httpd.conf 为空。但是有一个名为 000-default 的文件位于 /etc/apache2/sites-enabled/ 中,它看起来像这样:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

    DocumentRoot /var/www
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </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>

</VirtualHost>

我完全不清楚应该在哪里添加重写规则。我尝试将它们添加到 000-default 文件的 &lt;Directory /var/www/&gt; 部分,但它不起作用。

【问题讨论】:

    标签: php apache .htaccess mod-rewrite url-rewriting


    【解决方案1】:

    您将重写代码放在您拥有 .htaccess 文件的目录块中(如果您使用它们)。例如,如果 /var/www 是你的 docroot,你可以把它放在他们的:

        <Directory /var/www/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride None
            Order allow,deny
            allow from all
    
            RewriteEngine On
            RewriteCond %{REQUEST_FILENAME} !-f
            RewriteRule . /index.php [L]
        </Directory>
    

    【讨论】:

    • 由于某种原因它对我不起作用。我要做的是删除网址中的.php 扩展名。按照您的指示,我已将重写规则(在 .htaccess 中工作)添加到 000-default 文件的 &lt;Directory /var/www/&gt;,所以它现在看起来像这样,但不起作用:&lt;Directory /var/www/&gt; Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^([^\.]+)$ $1.php [NC,L]&lt;/Directory&gt;
    • @dmit 这在您的 .htaccesss 文件中有效吗? .htaccess 文件在哪个目录?
    • 您也可以在您的 OP 中提供一个前后 URL 示例吗?
    • 我在Root directory&gt;httpdocs 有它。我把它移到了根目录,它也能正常工作。例如,之前:www.mysite.com/login.php;之后:www.mysite.com/login
    • 我不明白。您的意思是您的代码和.htaccess 文件在/var/www/httpdocs 中吗?
    【解决方案2】:

    如果您使用的是 apache 2.2.16 或更新版本,请使用

    FallbackResource /index.php
    

    【讨论】:

      猜你喜欢
      • 2012-08-28
      • 1970-01-01
      • 2020-11-05
      • 1970-01-01
      • 1970-01-01
      • 2011-06-14
      • 2011-09-28
      • 2014-09-29
      • 1970-01-01
      相关资源
      最近更新 更多